From 32084d00161c849be2c812b1d2ef8b2ce0cbd783 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Mon, 14 Mar 2011 17:19:47 +0000 Subject: [PATCH] _csched_cpu_pick(): don't write idle bias more than once For the bias to be really meaningful, it should be updated only when the CPU selected will indeed be returned (and hence used for placing the vCPU in question). Signed-off-by: Jan Beulich --- xen/common/sched_credit.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/xen/common/sched_credit.c b/xen/common/sched_credit.c index bfdd567e3e..1d4d423620 100644 --- a/xen/common/sched_credit.c +++ b/xen/common/sched_credit.c @@ -464,6 +464,7 @@ _csched_cpu_pick(const struct scheduler *ops, struct vcpu *vc, bool_t commit) cpumask_t cpus; cpumask_t idlers; cpumask_t *online; + struct csched_pcpu *spc = NULL; int cpu; /* @@ -531,9 +532,8 @@ _csched_cpu_pick(const struct scheduler *ops, struct vcpu *vc, bool_t commit) && (weight_cpu * migrate_factor < weight_nxt) ) ) { cpus_and(nxt_idlers, cpus, nxt_idlers); - cpu = cycle_cpu(CSCHED_PCPU(nxt)->idle_bias, nxt_idlers); - if ( commit ) - CSCHED_PCPU(nxt)->idle_bias = cpu; + spc = CSCHED_PCPU(nxt); + cpu = cycle_cpu(spc->idle_bias, nxt_idlers); cpus_andnot(cpus, cpus, per_cpu(cpu_sibling_map, cpu)); } else @@ -542,6 +542,9 @@ _csched_cpu_pick(const struct scheduler *ops, struct vcpu *vc, bool_t commit) } } + if ( commit && spc ) + spc->idle_bias = cpu; + return cpu; } -- 2.30.2